<?php
header("Content-type: text/html; charset=utf-8");

// Expat
echo "Expat:<br>";
$parser = xml_parser_create();

//Function to use at the start of an element
function start($parser, $element_name, $element_attrs)
{
    switch ($element_name) {
        case "NOTE":
            echo "-- Note --<br />";
            break;
        case "TO":
            echo "To: ";
            break;
        case "FROM":
            echo "From: ";
            break;
        case "HEADING":
            echo "Heading: ";
            break;
        case "BODY":
            echo "Message: ";
    }
}

//Function to use at the end of an element
function stop($parser, $element_name)
{
    switch ($element_name) {
        case "NOTE":
            echo "-- End --<br />";
            break;
        case "TO":
            echo ".<br>";
            break;
        case "FROM":
            echo ".<br>";
            break;
        case "HEADING":
            echo ".<br>";
            break;
        case "BODY":
            echo ".<br>";
    }
}

//Function to use when finding character data
function char($parser, $data)
{
    echo $data;
}

//Specify element handler
xml_set_element_handler($parser, "start", "stop");

//Specify data handler
xml_set_character_data_handler($parser, "char");

//Open XML file
$fp = fopen("test.xml", "r");

//Read data
while ($data = fread($fp, 4096)) {
    xml_parse($parser, $data, feof($fp)) or
    die (sprintf("XML Error: %s at line %d",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);
echo "<br><br><br>";


// DOM
echo "DOM:<br>";
$xmlDoc = new DOMDocument();
$xmlDoc->load("test.xml");


print $xmlDoc->saveXML();
echo "<br><br>";


$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item) {
    print $item->nodeName . " = " . $item->nodeValue . "<br />";
}
echo "<br><br><br>";

/*
 * simplexml
 */
echo "simplexml:<br>";
$xml = simplexml_load_file("test.xml");

echo $xml->getName() . "<br />";

foreach ($xml->children() as $child) {
    echo $child->getName() . ": " . $child . "<br />";
}